
// jquery $ 
// 全局变量  $  (ajax  post get )
var $ = {
    // post  和  get 函数  合并一起  
    ajax:function(options){
        var {type="get",url,data,async=true,dataType="text",success} = options;
        if(data instanceof Object){  // 如果数据是一个对象  循环对象 拼接成字符串 
            var str = "";
            for(var key in data){   // 循环对象 
                console.log(key,data[key])
                str += key+"="+data[key]+"&";
            }
            data = str.substring(0,str.length-1);   //字符串截取 
        }
        console.log(data);


        var xhr = new XMLHttpRequest();
        if(type=="get"){
            xhr.open("get",data?url+'?'+data:url,async);
            xhr.send()
        }else{
            xhr.open("post",url,async);
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");   // 设置请求头的数据类型 
            xhr.send(data);   // 带参数 
        }
       
        xhr.onreadystatechange = function(){
            if(xhr.readyState==4 && xhr.status ==200){
                // var result = JSON.parse(xhr.responseText);  不一定所有的返回数据都是 json
                var result = xhr.responseText;
                if(dataType=="json"){
                    result = JSON.parse(result);
                }

                if(success){
                    success(result)    // 把result 暴露给调用的环境 
                }
            }
        }
    },
    post:function(options){
        var {url,data,async=true,dataType="text",success} = options;
        if(data instanceof Object){  // 如果数据是一个对象  循环对象 拼接成字符串 
            var str = "";
            for(var key in data){   // 循环对象 
                console.log(key,data[key])
                str += key+"="+data[key]+"&";
            }
            data = str.substring(0,str.length-1);   //字符串截取 
        }
        console.log(data)
        var xhr = new XMLHttpRequest();
        xhr.open("post",url,async);
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");   // 设置请求头的数据类型 
        xhr.send(data);   // 带参数 
        xhr.onreadystatechange = function(){
            if(xhr.readyState==4 && xhr.status ==200){
                // var result = JSON.parse(xhr.responseText);  不一定所有的返回数据都是 json
                var result = xhr.responseText;
                if(dataType=="json"){
                    result = JSON.parse(result);
                }
               
                if(success){
                    success(result)    // 把result 暴露给调用的环境 
                }
                
              
            }
        }
    },
    get:function(options){
        var {url,data,async=true,dataType="text",success} = options;
        if(data instanceof Object){  // 如果数据是一个对象  循环对象 拼接成字符串 
            var str = "";
            for(var key in data){   // 循环对象 
                console.log(key,data[key])
                str += key+"="+data[key]+"&";
            }
            data = str.substring(0,str.length-1);   //字符串截取 
        }
        console.log(data)
        var xhr = new XMLHttpRequest();
        xhr.open("get",data?url+'?'+data:url,async);
        xhr.send()
        xhr.onreadystatechange = function(){
            if(xhr.readyState==4 && xhr.status ==200){
                // var result = JSON.parse(xhr.responseText);  不一定所有的返回数据都是 json
                var result = xhr.responseText;
                if(dataType=="json"){
                    result = JSON.parse(result);
                }
                // console.log(result)

                // success 回调函数   
                // 根据后台返回的数据的内容进行判断 是否操作成功  
                // 登录接口  成功/失败   进入主页/ 重新登录
                // 删除接口  成功/失败   页面删除/ 提示删除失败
                // 一对多 以不变应万变 
                if(success){
                    success(result)    // 把result 暴露给调用的环境 
                }
                
                // const {status,detail} =  result;
                // if(status){
                //     // 修改成功
                //     loadGrade()
                //     editmodal.style.display = "none";
                // }
            }
        }
    },

    // 封装好的jsonp请求 
    jsonp:function(options){
        var {url,data="",jsonp="callback",jsonpcallback="fn"} = options;
        return new Promise((resolve,reject)=>{
                // 1. 动态的创建一个 script => 放到页面内 
            var script = document.createElement("script");
            if(data instanceof Object){    // 如果参数数据是对象  就需要把对象拼接成字符串 
                var str = "";
                for(var key in data){
                    str += key+"="+data[key] + "&";
                }
                data = str.substring(0,str.length-1);
            }
            // 得到JSONP 接口的结果 
            window[jsonpcallback] = function(result){
                resolve(result)   // 成功的回调 
            }   
            script.src = `${url}?${data}&${jsonp}=${jsonpcallback}`;
            document.body.appendChild(script);
            script.onload = function(){
                script.remove()
            }
        })
    }
}


